﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;

namespace DynaSpace.Entity
{
	/// <summary>
	/// Abstraktní třída reprezentující objekt ve hře (na mapě), který se každý krok updatuje
	/// </summary>
	public abstract class UpdatableEntity : EntityBase 
	{
		internal bool isDeleted;

		/// <summary>
		/// Konstruktor <see cref="UpdatableEntity">entity</see>
		/// </summary>
		/// <param name="parent">Rodičovský <see cref="Playground"/></param>
		/// <param name="position"></param>
		public UpdatableEntity(Playground parent, Vector2 position)
			:base(parent,position)
		{
		}

		/// <summary>
		/// Smaže z mapy a odstraní návaznosti na entitu
		/// </summary>
		public override void Delete()
		{
			isDeleted = true;
			base.Delete();
		}

		/// <summary>
		/// Znovu přidá do kolekcí instanci
		/// </summary>
		public override void AddAgain()
		{
			isDeleted = false;
			base.AddAgain();
		}

		/// <summary>
		/// Vrací nebo nastavuje pohon této entity
		/// </summary>
		public IEntityEngine Engine
		{
			get;
			set;
		}

		/// <summary>
		/// Vyvolá se při updatu
		/// </summary>
		/// <param name="gameTime"></param>
		public virtual void Update(GameTime gameTime)
		{
			if (Engine != null)
				Engine.Update(this,gameTime);
		}
	}
}
